import {selector} from "recoil";

/**
 * 用户是否登录状态
 *
 * <p>
 *  如果只需要判断是否登录，示例如下：
 *  const isLogin = useRecoilValue(userLoginState);
 *
 */
const userLoginState = selector<boolean>({
    key: "userLoginState",
    get: ({get}) => {
        return !!get(userInfoState);
    }
});

/**
 * 获取用户信息接口，在需要的地方使用，如果为 null 说明未登录、
 *
 * 示例：
 *  const userInfo = useRecoilValue(userInfoState);
 */
const userInfoState = selector<UserInfo | null>({
    key: 'userInfoState',
    get: async () => {
        return await getProfiles();
    },
});

/**
 * 获取用户登录信息接口，如果用户未登录则返回 null
 */
const getProfiles = async (): Promise<UserInfo | null> => {
    return new Promise<UserInfo | null>((resolve, reject) => {
        setTimeout(() => {
            resolve({
                username: "zhangshan",
                nickname: "张三",
                avatar: "",
                permits: []
            })
        }, 2 * 1000);
    });
}

export {
    userLoginState,
    userInfoState
}

export interface UserInfo {

    /**
     * 用户名称
     */
    username: string;

    /**
     * 昵称
     */
    nickname: string;

    /**
     * 用户头像
     */
    avatar: string;

    /**
     * 当前用户已经拥有的许可证
     */
    permits: Array<string>;
}
